class Sheet:
    sheet = {}

    def get(self, column: str):
        """
        该函数的目的是获取在column列的值，内容为等式的话需要计算并返回其结果。举例，若在"A1"列存储的值为"=7+3"，sheet.get("A1")应返回"10"。
        :param column: 列数
        :return: 该列存储的值，默认为空字符串
        """
        temp = self.sheet.get(column)
        if not temp:
            return ""
        # 如果是纯数字，把多余的空格去掉
        if temp.replace(" ", "").isdigit():
            temp = temp.replace(" ", "")
        # 如果是等式则进行计算
        if temp[0] == "=":
            # 如果循环引用，则进行提示
            if temp[1:] == column:
                return "#Circular"
            # 如果是包含其他列的值的等式，先把各个变量用实际值替换
            char = ""
            i = 1
            while i < len(temp):
                value = temp[i]
                # 下一位如果还是字母数字,则表示此变量不止一位,如AA,A1
                while i + 1 < len(temp) and temp[i].isalnum() and temp[i + 1].isalnum():
                    value +=  temp[i + 1]
                    i += 1
                i += 1
                # 如果value是变量则递归迭代取其值
                value = self.get(value) if value in self.sheet else value
                char += value
            # 不正确的等式，进行异常捕捉，正确的则计算其结果
            try:
                temp = round(eval(char))
            except SyntaxError:
                return "#Error"
        return str(temp)

    def getLiteral(self, column: str):
        """
        该函数的目的是获取在column列的字符串值，内容为等式的话不需要计算，直接返回字符串。举例，若在"A1"列存储的值为"=7+3"，sheet.getLiteral("A1")应返回"=7+3"。
        :param column: 列数
        :return: 该列存储的字符串值，默认为空字符串
        """
        temp = self.sheet.get(column,'')
        return temp

    def put(self, column: str, value: str):
        """
        该函数的目的是在column列存储value的值。如果该列已经被占用，则替换为当前值。
        :param column: 列数
        :param value: 在该列需要存储的值
        """
        self.sheet.update({column: value})
